// Copyright [2011] [Geist Software Labs Inc.]
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "oclDevice.h" 
#include "oclContext.h" 

oclDevice::oclDevice(oclContext& iContext, cl_device_id iDevice)
: oclObject("")
, mContext(iContext)
, mDevice(iDevice)
, mCommandQueue(0)
{
    size_t lSize = 0;
    clGetDeviceInfo(mDevice, CL_DEVICE_NAME, 0, 0, &lSize);
    oclSuccess("clGetKernelInfo", this);

    mName = new char[lSize];
    clGetDeviceInfo(mDevice, CL_DEVICE_NAME, lSize, mName, NULL);
    oclSuccess("clGetKernelInfo", this);

    mCommandQueue = clCreateCommandQueue(mContext, mDevice, CL_QUEUE_PROFILING_ENABLE, &sStatusCL);
    //mCommandQueue = clCreateCommandQueue(mContext, mDevice, CL_QUEUE_PROFILING_ENABLE, &sStatusCL);
    oclSuccess("clCreateCommandQueue", this);
};

oclDevice::~oclDevice()
{
    delete mName;
}

oclDevice::operator cl_device_id()  
{  
    return mDevice;  
}

oclDevice::operator bool()  
{  
    return mDevice != 0;  
}

//
//

oclDevice::operator cl_command_queue()  
{  
    return mCommandQueue;  
}

cl_command_queue oclDevice::getQueue()
{
    return mCommandQueue;
}

